Asynchronous Transfer Mode (ATM) communication switches have multiple output ports to perform high speed switching of multibyte cells of data. The switches are generally formed with a shared memory for buffering multiple cells of data, and several ports coupled to the memory for transferring data between the memory and busses or channels attached to the switch. Counters are used to provide a running total of how many bytes or nibbles (half bytes) of a cell have been transferred. In addition, there are countless uses for counters deep inside semiconductor chips used for executing instructions in computers and assisting with basic electronic circuit functions. Many of the counters are specifically designed for each intended purpose. This leads to extra effort in modifying each design to count to a specific number, and provide functions to start stop, continue and reset the count. When counters are used to help implement communication protocols such as ATM, there may be different lengths of cells for which each byte of the message must be counted. A different set of counters may be needed for each message length, increasing design cost and complexity. There is a need for a flexible counter than can handle different length cells without the need for reprogramming.